package cn.tedu.innerclass;/**
 * @Author 金帮嘉诚 @Date 2021-06-25 星期五 15:28
 */
/*本类用于测试成员被static修饰*/

/**
 * 知识点
 * static修饰内部类不常用
 * 创建内部类的方式和普通内部类不同
 * 可以直接用 new 外部类类名.内部类类名() 来调用
 */
public class TestInner3 {
    public static void main(String[] args) {
//        new Outer3().new Inner3();//不能再这样创建

        //创建匿名对象 访问eat()方法
        new Outer3.Inner3().eat();

        /*现象：内部类被static修饰以后 newOuter3()报错*/
        //创建内部类对象 ：new 外部类类名.内部类类名()创建，而不是 外部类对象.内部类对象 的格式
        Outer3.Inner3 inner3 = new Outer3.Inner3();//没有调用Outer3的静态代码块
        inner3.eat();
        inner3.show2();
        //
        /*访问静态内部类中的静态资源可以链式加载*/
        Outer3.Inner3.show2();
//        Outer3.Inner3.InnerInner3.InInIn3.InInInIn3.show5();
    }
}

class Outer3 {
    static{
        System.out.println("Outer3...staticBlock");
    }
    static class Inner3 {
//        static class InnerInner3 {
//            static class InInIn3 {
//                static class InInInIn3 {
//                    public static void show5() {
//                        System.out.println("InInInIn3...show5()");
//                    }
//                }
//            }
//        }

        static {
            System.out.println("Inner3...staticBlock");
        }
        public static void show2() {
            System.out.println("Inner3...show2()");
        }

        public void eat() {
            System.out.println("Inner3...eat()");
        }
    }
}
